From f4e8c6539a60df0f710722f303272bafc55bd31d Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Thu, 5 Jan 2017 11:23:15 +0000 Subject: [PATCH] x86/pv: Fix determination of 64bit mode in emulate_privilege_op() ctxt->addr_size is expressed in bits rather than bytes, and has the value 16, 32 or 64. Comparing < 8 made the intended non-64bit paths dead. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich Tested-by: Jan Beulich --- xen/arch/x86/traps.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 2d211d1621..a33109d545 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -2100,7 +2100,7 @@ static int pv_emul_virt_to_linear(unsigned long base, unsigned long offset, *addr = base + offset; - if ( ctxt->addr_size < 8 ) + if ( ctxt->addr_size < 64 ) { if ( limit < bytes - 1 || offset > limit - bytes + 1 ) rc = X86EMUL_EXCEPTION; @@ -2169,7 +2169,7 @@ static int priv_op_read_segment(enum x86_segment seg, struct segment_register *reg, struct x86_emulate_ctxt *ctxt) { - if ( ctxt->addr_size < 8 ) + if ( ctxt->addr_size < 64 ) { unsigned long limit; unsigned int sel, ar; -- 2.30.2